package com.gxm.base.grammar_运算语法.面试题;

import org.junit.Test;

public class equals与等等区别 {

    /**
     *     Object.class
     *              public boolean equals(Object var1) {
     *                   return this == var1;
     *              }
     * 　　可以看出，String类对equals方法进行了重写，用来比较指向的字符串对象所存储的字符串是否相等。
     *
     * 　　其他的一些类诸如Double，Date，Integer等，都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。
     *
     * 　　总结来说：
     *
     * 　　1）对于==，如果作用于基本数据类型的变量，则直接比较其存储的 “值”是否相等；
     *
     * 　　　　如果作用于引用类型的变量，则比较的是所指向的对象的地址
     *
     * 　　2）对于equals方法，注意：equals方法不能作用于基本数据类型的变量
     *
     * 　　　　如果没有对equals方法进行重写，则比较的是引用类型的变量所指向的对象的地址；
     *
     * 　　　　诸如String、Date等类对equals方法进行了重写的话，比较的是所指向的对象的内容。
     */
    @Test
    public void test01(){
        int n=3;
        int m=3;

        System.out.println(n==m);

        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello");

        System.out.println(str1==str2);
        System.out.println(str1.equals(str2));

        str1 = str;
        str2 = str;
        System.out.println(str1==str2);
    }
}
